/*
 *  基本的空间单元信息(位置和朝向) + 运动控制
 */
#ifndef _3D_ATOM_H_
#define _3D_ATOM_H_

class D3Atom
{
public:
    //基本状态信息(只读)
    float xyz[3] = {0, 0, 0};     //三维空间坐标
    float quat[4] = {1, 0, 0, 0}; //四元数记录姿态信息

    // float eye[3] = {1, 0, 0};   //三维向量(目视朝向)
    // float stand[3] = {0, 0, 1}; //三维向量(站立朝向)

    float speed[3] = {0, 0, 0}; //三维方向速度
    float accel[3] = {0, 0, 0}; //三维方向加速度

    //重置
    virtual void Reset(float x = 0, float y = 0, float z = 0,
        float turnUpDown = 0, float turnLeftRight = 0, float rollLeftRight = 0);

    //相对位置转换,把空间坐标xyz转换为相对当前单元的坐标,即以当前单元为坐标原点的坐标
    virtual void Transfer(float xyz[3]);

    //环绕卫星坐标的相对位置转换
    virtual void TransferSatellite(float xyz[3]);

    //空间坐标移动
    virtual void Move(float x, float y, float z);
    //按自己朝向移动
    virtual void MoveSelf(float frontBack, float leftRight, float upDown);
    //朝指定目标移动
    virtual void MoveTo(float xyz[3], float distance);

    //绕空间坐标轴旋转,单位:角度(以自身为原点,绕平行于空间坐标系的三轴旋转)
    virtual void Roll(float x, float y, float z);
    //绕自身坐标轴旋转,单位:角度
    virtual void RollSelf(float turnUpDown, float turnLeftRight, float rollLeftRight);
    //绕指定向量旋转,单位:角度
    // virtual void RollAround(float vector[3], float angle);

    //直接设置位置
    virtual void SetLocation(float x, float y, float z);
    //直接设置朝向
    virtual void SetDirection(float turnUpDown, float turnLeftRight, float rollLeftRight);

};

#endif // _3D_ATOM_H_
